#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define BUFFER_SIZE1 5
#define BUFFER_SIZE2 7

#define BUFFER_SIZE 2
#define SIZE 10

// int swapNum(int *val1, int * val2)
// {
//     int tmpVal = *val1;
//     *val1 = *val2;
//     *val2 = tmpVal;
//     return 0;
// }

// /* 升序（从小到大排）*/
// int bubbleSort02(int * nums, int numSize)
// {
//     /* 定义一个标记 */
//     int sorted = 0;
//     for (int end = numSize; end > 0; end--)
//     {
//         /* 一轮 */
//         for (int begin = 1; begin < end; begin++)//每一趟就会少一个数
//         {
//             if (nums[begin - 1] > nums[begin])
//             {
//                 /* 没有排好 */
//                 sorted = 0;
//                 /* swap */
//                 swapNum(&(nums[begin - 1]), &(nums[begin]));
//             }
//         }

//         if (sorted == 1)
//         {
//             break;
//         }
//     }
//     return 0;
// }

// /* 去重 */
// int removeDuplicates(int * nums, int numsSize)
// {
//     if (nums == NULL)
//     {
//         return 0;
//     }
//     if (numsSize <= 1)
//     {
//         return numsSize;
//     }

//     int index = 1;

//     for (int idx = 1; idx < numsSize; idx++)
//     {
//         if (nums[idx - 1] != nums[idx])
//         {
//             nums[index++] = nums[idx];
//         }
//     }
//     return index;
// }

// int twoIntersectingElements(int *nums1, int *nums2, int numsSize1, int numsSize2)
// {
//     /* 用于标记再num1中出现的数字 */
//     int array[SIZE] = { 0 };

//     int interSection[SIZE] = { 0 };//存储交集

//     int pos = 0;
//     for (int idx = 0; idx < numsSize1; idx++)
//     {
//         /* 用于标志出现过的元素 */
//         array[nums1[idx]] = 1;
//     }
//     for (int idx = 0; idx < numsSize2; idx++)
//     {
//         if (array[nums2[idx]] == 1)
//         {
//             printf("%d\n", nums2[idx]);
//             interSection[pos] = nums2[idx];
//             pos++;
//         }
//     }
//     printf("pos = %d\n", pos);

//     /* 先排序 */
//     bubbleSort02(interSection, pos);

//     int ret = removeDuplicates(interSection, pos);
//     printf("ret = %d\n", ret);

//     for (int idx = 0; idx < ret; idx++)
//     {
//         printf("interSection[%d] = %d\n", idx, interSection[idx]);
//     }
//     return 0;
// }



// int main()
// {
//     int nums1[BUFFER_SIZE1] = {4, 9, 5, 3, 2};
//     int nums2[BUFFER_SIZE2] = {9, 4, 9, 8, 4, 3, 2};
//     twoIntersectingElements(nums1, nums2, BUFFER_SIZE1, BUFFER_SIZE2);
  
//     return 0;
// }


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char * removeDuplicates(char * s)
{
    int len = strlen(s);
    if (s == NULL)
    {
        return NULL;
    }
    if (len == 0)
    {
        /* 空字符串直接返回 */
        return s;
    }

    /* 分配足够的空间来存储结果字符串 */
    char * array = (char *)malloc(sizeof(array) * (len + 1));
    if (!array)
    {
        return NULL;
    }

    /* 最终字符串的索引 */
    int pos = -1;
    for (int idx = 0; idx < len; idx++)
    {
        if (pos == -1 || s[idx] != array[pos])
        {
            pos++;
            array[pos] = s[idx];
        }
        else
        {
            pos--;
        }
    }
    array[pos + 1] = '\0';//添加结束符
    return array;
}

int main()
{

    char s[] = "bbbb";
    char * array = removeDuplicates(s);

    printf("array: %s\n", array);
    //free(array);//分配释放的内存
    return 0;
}